﻿namespace Lesson_7_函数
{
    internal class Program
    {
        #region 知识点一 基本概念
        //函数（方法）
        //本质是一块具有名称的代码块
        //可以使用函数（方法）的名称来执行该代码块
        //函数（方法）是对代码进行重复使用的一种机制

        //函数（方法）的主要作用
        //1.封装代码
        //2.提高代码复用性
        //3.抽象行为
        #endregion

        #region 知识点二 函数写在哪里
        //1.class语句块中
        //2.struct语句块中
        #endregion

        #region 知识点三 基本语法
        //  1       2       3           4
        //static 返回类型 函数名（参数类型 参数名1，参数类型 参数名2，...）
        //{
        //      函数的代码逻辑;
        //      ......
        //      5
        //      return 返回值;(如果有返回值才返回)
        //}

        //1.关于static 不是必须的 在没有学习类和结构体之前 都是必须写的

        //2-1.管于返回类型 引出一个新的关键字 void（表示没有返回值）
        //2-1.返回类型 可以写任意的变量类型

        //3.关于函数名 使用帕斯卡命名法 myName（驼峰命名法）MyName（帕斯卡命名法）

        //4-1.参数不是必须的，可以有0~n个参数 参数的类型也是可以任意类型的 多个参数的时候 需要用 逗号隔开
        //4-2.参数名 驼峰命名法 第一个单词小写 第二个单词开始大写

        //5.当返回值类型不是void的时候 必须使用return语句返回对应类型的内容 （注意：即使是void也可以选择性使用return）



        #endregion

        #region 知识点四 实际运用
        //1.无参无返回值函数
        static void SayHello()
        {
            Console.WriteLine("Hello Worid!");
            //在没有返回值的时候 可以省略return关键字
        }

        //2.有参无返回值函数
        static void SayYourName(string name)
        {
            Console.WriteLine("Hello {0}!", name);
        }

        //3.无参有返回值函数
        static string WhatYourName()
        {
            return "My Name is Gad";
        }

        //4.有参有返回值函数
        static int Sum(int a, int b)
        {
            //return后面可以写表达式 只要表达式结果和返回值类型一致就可以
            return a + b;
        }

        //5.有参数有多返回值函数
        //传入俩个数 然后计算俩个数的和 平均值 返回俩个数的数组
        //函数的返回值 一定是一个类型 只能是一个内容
        static int[] Calc(int a, int b)
        {
            int sum = a + b;
            int avg = sum / 2;
            return new int[] { sum, avg };
        }
        #endregion

        #region 知识点五 关于return
        //即使函数没有返回值，我们也可以使用return、
        //return可以直接不执行之后的代码，直接返回到函数外部
        static void Speak(string str)
        {
            if( str == "混蛋")
            {
                return;
            }
            Console.WriteLine(str);
        }
        #endregion

        //总结
        //1.基本概念
        //2.函数写在哪里
        //3.基本语法 1 2 3 4 5
        //4.return 可以提前结束函数的执行 程序是线性执行的 从上到下执行
        static void Main(string[] args)
        {
            Console.WriteLine("函数");
            //调用函数 直接写函数名（参数） 加括号
            SayHello();
            //参数可以是 常量 变量 函数都可以
            //参数 一定是传一个 能得到对应类型的表达式
            string str = "Gad";
            SayYourName(str);
            SayYourName("MyGad");

            Console.WriteLine(WhatYourName());

            Console.WriteLine(Sum(10, 20));

            int[] arr = Calc(10, 20);
            Console.WriteLine(arr[0] + " " + arr[1]);

            Speak("混蛋");
        }
    }
}
